
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>如何处理大数据量的事务避免锁竞 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>如何处理大数据量的事务避免锁竞 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">数据库事务的四大基本特性（ACID）分别是什么，它们各自保证了什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. 原子性（Atomicity）：确保事务内的所有操作要么全部成功，要么全部失败。 2. 一致性（Consistency）：确保事务执行前后，数据库的完整性约束不被破坏。 3. 隔离性（Isolation）：确保并发执行的事务不会互相干扰。 4. 持久性（Durability）：确保一旦事务提交，其结果将永久保存到数据库中。</div>
          </div>
          <div class="card-source">来源: 文档中「事务的基本概念」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">除了高并发访问，文档中还提到了哪些导致锁竞争的主要原因？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档中提到的其他主要原因包括：长事务（长时间持有锁）、不合理的锁粒度（如表级锁）、锁的频繁请求、不合理的锁优先级策略、死锁、不合理的事务设计以及资源争用（如对索引、缓存的争用）。</div>
          </div>
          <div class="card-source">来源: 文档中「锁竞争的原因」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">“可重复读”（Repeatable Read）隔离级别解决了什么问题，但仍可能面临什么问题？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">“可重复读”隔离级别避免了脏读和不可重复读，提供了较高的数据一致性。但是，它仍然可能导致幻读（Phantom Read），即在同一事务中，由于其他事务新增或删除了数据，导致前后两次读取的结果集不同。</div>
          </div>
          <div class="card-source">来源: 文档中「使用合适的隔离级别」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">与表级锁相比，行级锁在提高系统性能方面最主要的优势是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">行级锁最主要的优势是能够显著提高并发性能。它允许多个事务同时访问同一表中的不同行，从而最大限度地减少锁的争用，尤其是在高并发环境中，避免了全表锁定的性能瓶颈。</div>
          </div>
          <div class="card-source">来源: 文档中「行级锁的优势」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">使用批量操作（Batch Operations）能带来哪些核心优点？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">批量操作的核心优点包括：1. 性能提升：通过减少数据库交互次数降低网络延迟和事务开销。2. 事务管理：在一个事务中完成，确保数据的一致性。3. 资源利用率：更有效地利用数据库连接、内存和CPU等资源。4. 简化代码逻辑：避免重复的数据库访问逻辑。</div>
          </div>
          <div class="card-source">来源: 文档中「批量操作」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">文档提出了哪些具体的优化策略来避免产生长事务？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">避免长事务的优化策略包括：拆分事务（将长事务拆分为多个短事务）、控制事务大小（限制单个事务处理的记录数）、使用异步处理、合理使用隔离级别、优化SQL语句以及使用行级锁。</div>
          </div>
          <div class="card-source">来源: 文档中「避免长事务」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">乐观锁和悲观锁在核心思想上有什么根本区别？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">根本区别在于对并发冲突的假设不同。乐观锁假设在事务执行过程中不会发生冲突，因此不加锁，只在更新时通过版本号或时间戳检查冲突。而悲观锁则假设总会发生冲突，因此在操作数据前会先加锁，阻止其他事务修改。</div>
          </div>
          <div class="card-source">来源: 文档中「采用乐观锁与悲观锁」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">根据文档，乐观锁和悲观锁分别适用于哪些典型的业务场景？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">乐观锁适用于读多写少的场景，例如在线购物、社交网络等数据冲突较少的业务。悲观锁适用于写多读少的场景，例如银行转账、库存管理等对数据一致性要求极高且写入冲突频繁的业务。</div>
          </div>
          <div class="card-source">来源: 文档中「采用乐观锁与悲观锁」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在实现批量操作时，为什么选择合适的“批量大小”至关重要？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">选择合适的批量大小至关重要，因为过小的批量会导致性能提升有限；而过大的批量可能会导致数据库内存溢出或长时间锁定资源，反而影响性能。因此，需要合理配置批量大小以平衡性能和资源使用。</div>
          </div>
          <div class="card-source">来源: 文档中「批量操作」部分</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
